home *** CD-ROM | disk | FTP | other *** search
/ Power Tools for Macintosh / Power Tools for Macintosh (SoftBit)(1992).iso / Applications / Alpha 4.01 / ACMDS / wc ACMD.c < prev   
C/C++ Source or Header  |  1990-12-01  |  2KB  |  141 lines

  1. /*
  2.  
  3.     wc.c
  4.  
  5.     This ACMD by Jon Wätte gives a wc-like output for the selection.
  6.     Copyright © 1990 Jon Wätte (h+@nada.kth.se)
  7.  
  8.     Permission granted to distribute FREELY by non-profit organizations
  9.     and individuals only.
  10.  
  11. */
  12.  
  13. /* #define DEBUG /* */
  14.  
  15. void
  16. _NumToString(long x, char * s)
  17. {
  18.     char * len = s;
  19.     char * t, * q;
  20.  
  21.     s++;
  22.     *len = 0;
  23.  
  24.     if(x < 0) {
  25.         *(s++) = '-';
  26.         (*len)++;
  27.     }
  28.  
  29.     q = s;
  30.     if(!x) {
  31.         *(s++) = '0';
  32.         (*len)++;
  33.     } else while(x) {
  34.         for(t = s; t > len; t--) *t = *(t-1);
  35.         *q = '0' + (x % 10);
  36.         x /= 10;
  37.         s++;
  38.         (*len)++;
  39.     }
  40. }
  41.  
  42.  
  43. void
  44. PresentData(long a, long b, long c)
  45. {
  46.     WindowPtr theWindow, saveWindow, frontPort;
  47.     Rect r;
  48.     char foo[256];
  49.     long time;
  50.     EventRecord theEvent;
  51.  
  52.     GetPort(&frontPort);
  53.     saveWindow = FrontWindow();
  54.  
  55.     SetRect(&r, 90, 90, 250, 170);
  56.     theWindow = NewWindow(0L, &r, "\PWord count", 1, 1, 0L, 0, 0L);
  57.     SelectWindow(theWindow);
  58.     SetPort(theWindow);
  59.     TextFont(0);
  60.     TextSize(12);
  61.     TextFace(0);
  62.     MoveTo(20, 20);
  63.     DrawString("\PLines:");
  64.     MoveTo(20, 40);
  65.     DrawString("\PWords:");
  66.     MoveTo(20, 60);
  67.     DrawString("\PChars:");
  68.     _NumToString(a, foo);
  69.     MoveTo(100, 20);
  70.     DrawString(foo);
  71.     _NumToString(b, foo);
  72.     MoveTo(100, 40);
  73.     DrawString(foo);
  74.     _NumToString(c, foo);
  75.     MoveTo(100, 60);
  76.     DrawString(foo);
  77.  
  78.     time = TickCount() + 600;
  79.     do {
  80.         GetNextEvent(mDownMask + keyDownMask, &theEvent);
  81.     } while(theEvent.what != keyDown && theEvent.what != mouseDown &&
  82.         TickCount() < time);
  83.  
  84.     DisposeWindow(theWindow);
  85.     SelectWindow(saveWindow);
  86.     SetPort(frontPort);
  87. }
  88.  
  89.  
  90. char *
  91. #ifdef DEBUG
  92. _main
  93. #else
  94. main
  95. #endif
  96. (char * inData)
  97. {
  98.     register char * data = inData;
  99.     register long wordcnt = 0;
  100.     register long rowcnt = 1;
  101.     register long flag = 1;
  102.  
  103.     while(*data) {
  104.         switch(*data) {
  105.  
  106.         case '\r':
  107.             rowcnt++;
  108.         case ' ':
  109.         case '\t':
  110.             wordcnt += flag;
  111.             flag = 0;
  112.             break;
  113.  
  114.         default:
  115.             flag = 1;
  116.             break;
  117.         }
  118.         data++;
  119.     }
  120.     if ((*(data - 1) != ' ') && (*(data - 1) != '\t') && (*(data - 1) != '\r')) 
  121.         wordcnt++;
  122.     PresentData(rowcnt, wordcnt, data - inData - (rowcnt - 1));
  123.  
  124.     DisposPtr(inData);
  125.     return 0L;
  126. }
  127.  
  128. #ifdef DEBUG
  129. main()
  130. {
  131.     InitGraf(&thePort);
  132.     InitFonts();
  133.     InitWindows();
  134.     InitMenus();
  135.     TEInit();
  136.     InitDialogs(0L);
  137.  
  138.     _main("Foo bar i skogen.\rJag undrar vad  som h{nder    \r    om man...");
  139. }
  140. #endif
  141.